MVVM প্যাটার্নে ViewModel একটি গুরুত্বপূর্ণ ভূমিকা পালন করে, কারণ এটি Model এবং View এর মধ্যে তথ্য প্রবাহ এবং কমিউনিকেশন পরিচালনা করে। ViewModel ডেটার প্রক্রিয়াকরণ এবং পরিবর্তন পরিচালনা করে, এবং সেই ডেটা View এ উপস্থাপন করার জন্য প্রস্তুত করে। এর পাশাপাশি, এটি Model থেকে ডেটা গ্রহণ করে এবং View এর সঙ্গে ডেটা বাইন্ডিংয়ের মাধ্যমে UI উপাদানগুলির সাথে ডেটার সিঙ্ক্রোনাইজেশন বজায় রাখে।
এখানে ViewModel থেকে Model এবং View এর সাথে ডাটা কমিউনিকেশন সম্পর্কে বিস্তারিত আলোচনা করা হয়েছে।
ViewModel এর প্রধান কাজ হল Model থেকে ডেটা সংগ্রহ এবং সেই ডেটাকে View এর জন্য প্রক্রিয়াকরণ করা। যখন ViewModel Model থেকে ডেটা গ্রহণ করে, তখন এটি সাধারণত ডেটা সেবা (service layer) বা ডেটাবেস থেকে ডেটা আনতে Repository বা Data Service ব্যবহার করে।
public class ProductViewModel
{
private readonly ProductRepository _repository;
public ProductViewModel(ProductRepository repository)
{
_repository = repository;
}
public string ProductName { get; set; }
public decimal ProductPrice { get; set; }
public void SaveProduct()
{
var product = new Product
{
Name = ProductName,
Price = ProductPrice
};
_repository.AddProduct(product); // Model এ ডেটা সেভ করা
}
}
এখানে, ProductViewModel ডেটা সেভ করতে ProductRepository কে কল করছে, যা Model (Product) এর ডেটা সেভ করবে।
ViewModel Model থেকে ডেটা ফেচ করে এবং সেটি View তে প্রদর্শনের জন্য প্রস্তুত করে। Model এর মধ্যে থাকা ডেটা (যেমন ডেটাবেস বা API থেকে প্রাপ্ত ডেটা) ViewModel দ্বারা নিয়ন্ত্রণ এবং প্রক্রিয়াকৃত হয়।
public class ProductViewModel
{
private readonly ProductRepository _repository;
public ProductViewModel(ProductRepository repository)
{
_repository = repository;
}
public ObservableCollection<Product> Products { get; set; }
public void LoadProducts()
{
var productList = _repository.GetAllProducts(); // Model থেকে ডেটা সংগ্রহ
Products = new ObservableCollection<Product>(productList); // ViewModel-এ ডেটা সন্নিবেশ
}
}
এখানে, ViewModel ProductRepository এর মাধ্যমে Model থেকে সমস্ত প্রোডাক্টের তথ্য সংগ্রহ করছে এবং Products প্রপার্টির মাধ্যমে সেই ডেটাকে View-এ প্রদর্শন করার জন্য প্রস্তুত করছে।
ViewModel থেকে View এর সাথে ডাটা কমিউনিকেশন মূলত Data Binding এর মাধ্যমে ঘটে। ViewModel এর প্রপার্টিগুলি UI উপাদানগুলির সাথে বাইন্ড করা হয়, যাতে View-এ কোনো পরিবর্তন হলে তা স্বয়ংক্রিয়ভাবে ViewModel-এ প্রভাব ফেলে এবং vice versa। ViewModel-এ থাকা ডেটার পরিবর্তন হলে তা View-এ রিফ্লেক্ট হয় এবং UI-তে পরিবর্তন দেখা যায়।
ViewModel এর প্রপার্টি UI উপাদানগুলির সাথে বাইন্ড করে View-এ ডেটা প্রদর্শন করা হয়। ডেটা বাইন্ডিংয়ের মাধ্যমে ViewModel এর প্রপার্টি পরিবর্তিত হলে UI স্বয়ংক্রিয়ভাবে আপডেট হয়।
<!-- XAML File (View) -->
<TextBox Text="{Binding ProductName}" />
<TextBox Text="{Binding ProductPrice}" />
<Button Content="Save" Command="{Binding SaveCommand}" />
এখানে, TextBox এর Text প্রপার্টি ProductName এবং ProductPrice এর সাথে বাইন্ড করা হচ্ছে। ProductName এবং ProductPrice ViewModel-এ থাকতে পারে, এবং যখন এগুলির মান পরিবর্তিত হবে, তখন তা UI-তে (View) স্বয়ংক্রিয়ভাবে আপডেট হবে।
ViewModel এর কমান্ড প্রপার্টি View এর অ্যাকশন (যেমন, বাটন ক্লিক) সাথে বাইন্ড করা হয়। Command Binding ব্যবহার করে View থেকে ViewModel এর কমান্ড মেথড কল করা হয়।
public class ProductViewModel
{
public ICommand SaveCommand { get; private set; }
public ProductViewModel()
{
SaveCommand = new RelayCommand(SaveProduct);
}
private void SaveProduct()
{
// Save the product logic
}
}
এখানে, SaveCommand View থেকে Button এর মাধ্যমে কল হবে। যখন ব্যবহারকারী বাটনে ক্লিক করবেন, তখন ViewModel-এ থাকা SaveProduct মেথডটি ট্রিগার হবে।
XAML এর মধ্যে কমান্ড বাইন্ডিং:
<Button Content="Save" Command="{Binding SaveCommand}" />
এখানে, Button এর Command প্রপার্টি SaveCommand এর সাথে বাইন্ড করা হয়েছে, এবং যখন ব্যবহারকারী বাটনটি ক্লিক করবেন, তখন SaveProduct মেথডটি কল হবে।
common.read_more